package com.gpt.article.service.impl;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.common.utils.sign.Md5Utils;
import com.sdImg.service.GenImgService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.gpt.article.mapper.GptSysFileMapper;
import com.gpt.article.domain.GptSysFile;
import com.gpt.article.service.IGptSysFileService;

/**
 * 采集文件Service业务层处理
 * 
 * @author zhuzi
 * @date 2023-10-31
 */
@Service
public class GptSysFileServiceImpl implements IGptSysFileService 
{
    @Autowired
    private GptSysFileMapper gptSysFileMapper;


    /**
     * 查询采集文件
     * 
     * @param id 采集文件主键
     * @return 采集文件
     */
    @Override
    public GptSysFile selectGptSysFileById(Long id)
    {
        return gptSysFileMapper.selectGptSysFileById(id);
    }

    /**
     * 查询采集文件列表
     * 
     * @param gptSysFile 采集文件
     * @return 采集文件
     */
    @Override
    public List<GptSysFile> selectGptSysFileList(GptSysFile gptSysFile)
    {
        List<GptSysFile> imgList = gptSysFileMapper.selectGptSysFileList(gptSysFile);
        for(GptSysFile file:imgList){
            String savePaperImgPath = "/dev-api/profile/upload/"+ file.getDir()+file.getImgmd5()+".jpg";
            file.setImgurl(savePaperImgPath);
        }
        return imgList;
    }

    /**
     * 新增采集文件
     * 
     * @param gptSysFile 采集文件
     * @return 结果
     */
    @Override
    public int insertGptSysFile(GptSysFile gptSysFile)
    {
        gptSysFile.setCreateTime(DateUtils.getNowDate());
        return gptSysFileMapper.insertGptSysFile(gptSysFile);
    }

    /**
     * 修改采集文件
     * 
     * @param gptSysFile 采集文件
     * @return 结果
     */
    @Override
    public int updateGptSysFile(GptSysFile gptSysFile)
    {
        return gptSysFileMapper.updateGptSysFile(gptSysFile);
    }

    /**
     * 批量删除采集文件
     * 
     * @param ids 需要删除的采集文件主键
     * @return 结果
     */
    @Override
    public int deleteGptSysFileByIds(Long[] ids)
    {
        return gptSysFileMapper.deleteGptSysFileByIds(ids);
    }

    /**
     * 删除采集文件信息
     * 
     * @param id 采集文件主键
     * @return 结果
     */
    @Override
    public int deleteGptSysFileById(Long id)
    {
        return gptSysFileMapper.deleteGptSysFileById(id);
    }

    /**
     * 洗图根据图片id
     * @param ids 采集文件主键
     * @return
     */
    @Override
    public List<String> xituStart(Long[] ids) {
        List<GptSysFile> files = gptSysFileMapper.selectGptSysFileByIds(ids);
        List<String> genUrlmd5 = genImgs(files);
        return genUrlmd5;
    }



    public List<String> getImgBymd5(String[] imgMd5) {
        List<GptSysFile> files = gptSysFileMapper.selectGptSysFileByImgMd5(imgMd5);
        List<String> genUrlmd5 = genImgs(files);
        return genUrlmd5;
    }
    /**
     * 洗图逻辑
     * @param files
     * @return
     */
    public  List<String> genImgs(List<GptSysFile> files){
        String prompts  = "";
        GptSysFile gptSysFile = null;
        List<String> genUrlmd5 = new ArrayList<String>();
        for(GptSysFile file:files){
            String sourceImgPath = RuoYiConfig.getUploadPath()+"/"+ file.getDir()+file.getImgmd5()+".jpg";
            String imgMd5 = Md5Utils.hash(DateUtils.getNowDate()+file.getImgmd5());
            String md5Name = imgMd5+".jpg";
            String posImgPath = "/dev-api/profile/upload/"+ file.getDir()+md5Name;
            String targetImgPath = RuoYiConfig.getUploadPath()+"/"+  file.getDir()+md5Name;
            prompts  = file.getImgPromts();
            if(StringUtils.isEmpty(prompts)){
                prompts = "";
            }
            boolean hasSuccesss =  new GenImgService().img2img(sourceImgPath,targetImgPath,prompts);
            if(!hasSuccesss){
                System.out.println("图片生成失败");
                continue;
            }
            gptSysFile  = new GptSysFile();
            gptSysFile.setDir(file.getDir());
            gptSysFile.setName(file.getName());
            gptSysFile.setSizes(FileUtils.GetFileSize(new File(targetImgPath)));
            gptSysFile.setUserId("admin");
            gptSysFile.setUserName("管理员");
            gptSysFile.setArtTitle(file.getArtTitle());
            gptSysFile.setXitustatus("1");
            gptSysFile.setUrlMd5(file.getUrlMd5());
//            gptSysFile.setGenImgId();
            gptSysFile.setImgmd5(imgMd5);
            gptSysFile.setImgPromts(prompts);
            gptSysFile.setOrderNo(file.getOrderNo());

            try {
                gptSysFileMapper.insertGptSysFile(gptSysFile);
            }catch (Exception e){
                System.out.println("图片已存在无需保存："+e.getMessage());
            }
            genUrlmd5.add(posImgPath);
        }
        return genUrlmd5;
    }
}
